package com.tl.sboot.utils;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;  
import java.util.List;  
  
/**  
 *  JSON数据处理工具类  
 */  
public class JsonUtil  
{  
    /**  
     * 实体类型的对象  
     */  
    public static final int OBJECT_TYPE_BEAN = 1;  
  
    /**  
     * 集合类型对象  
     */  
    public static final int OBJECT_TYPE_LIST = 2;  
  
    /**  
     * 方法名称：writeJsonToResponse  
     * 内容摘要：向客户端写入JSON字符串流  
     * @param response  HTTP响应  
     * @param object    待写入的对象  
     * @param objType   待写入的对象类型  
     * @return  
     */  
    public static boolean writeJsonToResponse(HttpServletResponse response, Object object, int objType)  
    {  
        boolean flag = true;  
  
        if(object == null)  
        {  
            DebugOut.println("待写入的对象为空");  
            return false;  
        }  
  
        response.setContentType("text/xml; charset=UTF-8");  
  
        try  
        {  
            JSON json = null;  
  
            if (objType == OBJECT_TYPE_BEAN)  
            {  
                json = JSONObject.fromObject(object);  
            }  
            else if (objType == OBJECT_TYPE_LIST)  
            {  
                json = JSONArray.fromObject(object);  
            }  
            else  
            {  
            	DebugOut.println("待写入实体的对象类型不正确");  
                return false;  
            }  
  
            String responseText = json.toString();  
//            Debug.println(json.toString());  
            response.getWriter().write(responseText);  
        }  
        catch (IOException e)  
        {  
            flag = false;  
            e.printStackTrace();  
        }  
        return flag;  
    }  
  
    /**  
     * 方法名称：parseJsonObjectToBean  
     * 内容摘要：将一个JSON对象转换成指定类型的Bean  
     * @param json  任意实体，包括Json格式字符串  
     * @param clazz 需要转换的bean的Class  
     * @return  
     */  
    public static Object parseJsonObjectToBean(Object json, Class<?> clazz)  
    {  
        Object bean = null;  
        try  
        {  
            JSONObject jsonObject = JSONObject.fromObject(json);  
  
            bean = JSONObject.toBean(jsonObject, clazz);  
        }  
        catch (Exception e)  
        {  
            e.printStackTrace();  
        }  
  
        return bean;  
    }  
  
    /**  
     * 方法名称：parseJsonArrayToBean  
     * 内容摘要：将一个JSON对象转换成指定类型的Bean集合  
     * @param json  任意实体，包括Json格式字符串  
     * @param clazz 需要转换的bean的Class  
     * @return  
     */  
    public static List<?> parseJsonArrayToBean(Object json, Class<?> clazz)  
    {  
        List<Object> list = new LinkedList<Object>();  
        try  
        {  
            JSONArray jsonArray = JSONArray.fromObject(json);  
  
            Object[] beans = jsonArray.toArray();  
  
            Object bean = null;  
            for(int i=0 ; i< beans.length; i++)  
            {  
                bean = parseJsonObjectToBean(beans[i], clazz);  
                list.add(bean);  
            }  
  
        }  
        catch (Exception e)  
        {  
            e.printStackTrace();  
        }  
  
        return list;  
    }  
  
    /**  
     * 方法名称：getJsonString  
     * 内容摘要：将对象转换为JSON字符串  
     * @param object  
     * @param objType  
     * @return  
     */  
    public static String getJsonString(Object object, int objType)  
    {  
        JSON json = null;  
        try  
        {  
            json = null;  
  
            if (objType == OBJECT_TYPE_BEAN)  
            {  
                json = JSONObject.fromObject(object);  
            }  
            else if (objType == OBJECT_TYPE_LIST)  
            {  
                json = JSONArray.fromObject(object);  
            }  
            else  
            {  
                return "待写入实体的对象类型不正确";  
            }  
        }  
        catch (Exception e)  
        {  
            return "转换JSON字符串出错";  
        }  
  
        return json.toString();  
    }  

    /**  
    * @Title: JsonStrTrim  
    * @author : jsw  
    * @date : 2012-12-7  
    * @time : 上午09:19:18  
    * @Description: 传入string 类型的 json字符串 去处字符串中的属性值的空格  
    * @param jsonStr  
    * @return  
    * @exception:(异常说明)  
    */  
    public static JSONObject JsonStrTrim(String jsonStr){  
          
        JSONObject reagobj = JSONObject.fromObject(jsonStr);  
        // 取出 jsonObject 中的字段的值的空格  
        @SuppressWarnings("rawtypes")
		Iterator itt = reagobj.keys();  
          
        while (itt.hasNext()) {  
              
            String key = itt.next().toString();  
            String value = reagobj.getString(key);  
              
            if(value == null){                
                continue ;        
            }else if("".equals(value.trim())){                
                continue ;  
            }else{  
                reagobj.put(key, value.trim());  
            }  
        }  
        return reagobj;  
    }
  
}  